package com.unju.ventanas.usuario;

import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Iterator;

import javax.swing.ButtonGroup;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.border.TitledBorder;

import com.unju.hibernate.entidades.Perfil;
import com.unju.hibernate.entidades.Usuario;
import com.unju.hibernate.patronDAO.imp.PerfilDAOImp;
import com.unju.hibernate.patronDAO.imp.UsuarioDAOImp;
import com.unju.utils.AllShowMessage;
import com.unju.utils.ConstantesGlobales;
import com.unju.ventanas.principal.JFrmPrincipal;

import javax.swing.JRadioButton;

import java.awt.Font;

public class JDialogEditarUsuarioComun extends JDialog {
	JPanel pUsuario;
	private JComboBox<Perfil> cmbTiposUsuarios;
	private JTextField txtNombreDeUsuario;
	private JPasswordField txtSuContrasea;
	private JPasswordField txtRepContrasenia;
	private JCheckBox chckEditarUsuario;
	private JRadioButton rdbtnActiva;
	private JRadioButton rdbtnInactiva;
	private JLabel lblCuenta;
	private JLabel lblNuevoUsuario;
	Usuario usu;
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * Create the dialog.
	 */
	public JDialogEditarUsuarioComun(JFrmPrincipal principal,Usuario u) {		
		crearVentana();
		initButton();		
		panelUserPass();
		usu=u;
		this.setModal(true);	
		cargarTipos();
		cargarDatosUsuario(usu);		
		habilitarUsuarioComun(false);
		setVisible(true);
	}
	public void crearVentana(){
		setIconImage(Toolkit.getDefaultToolkit().getImage(JDialogNuevoUsuario.class.getResource("/com/unju/img/User.png")));
		setPreferredSize(new Dimension(840, 250)); 		
		setMinimumSize(new Dimension(840,250));
		setMaximumSize(new Dimension(840,250));	
		setBounds(0, 0, 840, 250);
		setLocationRelativeTo(null);
		getContentPane().setLayout(null);
		setTitle(ConstantesGlobales.EDITAR_USUARIO);
	}
	
	public void panelUserPass(){
		pUsuario = new JPanel();
		pUsuario.setLayout(null);
		pUsuario.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "Usuario y Contrase\u00F1a", TitledBorder.LEFT, TitledBorder.TOP, null, null));
		pUsuario.setBounds(10, 50, 804, 113);
		getContentPane().add(pUsuario);
		
		JLabel lblContrasea = new JLabel("Contrase\u00F1a");
		lblContrasea.setBounds(300, 47, 97, 14);
		pUsuario.add(lblContrasea);
		
		JLabel label_6 = new JLabel("Usuario:");
		label_6.setBounds(20, 47, 66, 14);
		pUsuario.add(label_6);
		
		JLabel lblRepContrasenia = new JLabel("Tipo de Usuario:");
		lblRepContrasenia.setBounds(20, 77, 102, 14);
		pUsuario.add(lblRepContrasenia);
		
		cmbTiposUsuarios = new JComboBox<Perfil>();		
		cmbTiposUsuarios.setBounds(120, 75, 160, 20);		
		pUsuario.add(cmbTiposUsuarios);
		
		chckEditarUsuario = new JCheckBox("Editar");
		chckEditarUsuario.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (chckEditarUsuario.isSelected())
					habilitarUsuarioComun(true);
				else
					habilitarUsuarioComun(false);
			}
		});
		chckEditarUsuario.setBounds(70, 17, 97, 23);
		pUsuario.add(chckEditarUsuario);
		
		txtNombreDeUsuario = new JTextField();				
		txtNombreDeUsuario.setBounds(120, 44, 160, 20);
		pUsuario.add(txtNombreDeUsuario);
		txtNombreDeUsuario.setColumns(10);
		
		txtSuContrasea = new JPasswordField();	
		txtSuContrasea.setBounds(420, 44, 137, 20);
		pUsuario.add(txtSuContrasea);
		txtSuContrasea.setColumns(10);
		
		JLabel lblRepetirContrasea = new JLabel("Repetir Contrase\u00F1a:");
		lblRepetirContrasea.setBounds(300, 78, 120, 14);
		pUsuario.add(lblRepetirContrasea);
		
		txtRepContrasenia = new JPasswordField();	
		txtRepContrasenia.setColumns(10);
		txtRepContrasenia.setBounds(420, 75, 137, 20);
		pUsuario.add(txtRepContrasenia);
		
		lblCuenta = new JLabel("Cuenta:");
		lblCuenta.setBounds(580, 30, 46, 14);
		pUsuario.add(lblCuenta);
		
		rdbtnActiva = new JRadioButton("Activa");
		rdbtnActiva.setBounds(635, 43, 109, 23);
		rdbtnActiva.setSelected(true);
		pUsuario.add(rdbtnActiva);		
		rdbtnInactiva = new JRadioButton("Inactiva");
		rdbtnInactiva.setBounds(635, 73, 109, 23);
		pUsuario.add(rdbtnInactiva);
		ButtonGroup op1= new ButtonGroup();
		op1.add(rdbtnActiva);
		op1.add(rdbtnInactiva);		
		
		lblNuevoUsuario = new JLabel("Modificacion de Usuario");
		lblNuevoUsuario.setFont(new Font("Tahoma", Font.BOLD, 20));
		lblNuevoUsuario.setBounds(250, 10, 250, 25);
		getContentPane().add(lblNuevoUsuario);
	}

	public void initButton(){
		JButton btnAceptar = new JButton(ConstantesGlobales.BTN_GUARDAR);
		btnAceptar.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				modificarUsuario(usu);
			}
		});
		btnAceptar.setBounds(610, 180, 89, 23);
		getContentPane().add(btnAceptar);		
		
		JButton btnCancelar = new JButton(ConstantesGlobales.BTN_CANCELAR);
		btnCancelar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				dispose();
			}
		});
		btnCancelar.setBounds(709, 180, 89, 23);
		getContentPane().add(btnCancelar);
	}
	

	private void habilitarUsuarioComun(boolean est){
		txtNombreDeUsuario.setEnabled(est);
		txtSuContrasea.setEnabled(est);
		txtRepContrasenia.setEnabled(est);
		cmbTiposUsuarios.setEnabled(est);	
		rdbtnActiva.setEnabled(est);
		rdbtnInactiva.setEnabled(est);
	}
	/**
	 * No deberia devolver dos Tipos de Usuarios con el mismo nombre
	 */
	private void cargarTipos(){		
		try {
			 DefaultComboBoxModel<Perfil> modeloCombo = new DefaultComboBoxModel<Perfil>();
			
			Iterator<Perfil> iterador = new PerfilDAOImp().getAll().iterator(); //Le solicito a la lista que me devuelva un iterador con todos los el elementos contenidos en ella			 
			//Mientras que el iterador tenga un proximo elemento
			while( iterador.hasNext() ) {
			       Perfil perfil = (Perfil) iterador.next();
			       modeloCombo.addElement(perfil);		      
			}		
			cmbTiposUsuarios.setModel(modeloCombo);
		} catch (Exception e) {
			AllShowMessage.showErrorMessage(ConstantesGlobales.MENSAJE_LISTA_ERROR+e);
		}				
	}
	@SuppressWarnings("deprecation")
	public void modificarUsuario(Usuario u){
		try {			
			u.setClave(txtSuContrasea.getText());
			u.setCorreoElectronico("");
			u.setNombreUsuario(txtNombreDeUsuario.getText());
			u.setPerfil((Perfil)cmbTiposUsuarios.getSelectedItem());
			if(rdbtnActiva.isSelected())
				u.setEstado(true);
			if(rdbtnInactiva.isSelected())
				u.setEstado(false);
			new UsuarioDAOImp().update(u);
			AllShowMessage.showMessage(ConstantesGlobales.MENSAJE_GUARDAR_CORRECTO);
			dispose();
		} catch (Exception e) {
			AllShowMessage.showErrorMessage(ConstantesGlobales.MENSAJE_GUARDAR_ERROR+e);
		}
	}
	
	public void cargarDatosUsuario(Usuario u){
		try {		
			txtSuContrasea.setText(u.getClave());
			txtRepContrasenia.setText(u.getClave());
			txtNombreDeUsuario.setText(u.getNombreUsuario());			
			cmbTiposUsuarios.setSelectedItem(u.getPerfil());			
			if(u.isEstado())
				rdbtnActiva.setSelected(true);
			else
				rdbtnInactiva.setSelected(true);						
		} catch (Exception e) {
			AllShowMessage.showMessage("Error al cargar los datos, Causa de Error: "+e);
		}		
	}
}
